package com.ylr.basic.framework.feign;

import com.ylr.base.common.tool.Result;
import com.ylr.basic.common.vo.AesVo;

import java.util.Map;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wyw
 * date: 2023-05-12 10:16:42
 * className: YbAesBaseClient
 * version: 1.0
 * description:
 */
public interface YbAesBaseClient {

    /**
     * 明文加密接口
     * @param aesVo 参数对象
     * @return 密文
     */
    Result<String> encrypt(AesVo aesVo);

    /**
     * 明文加密接口
     * 生成十六进制密文
     * @param plainText 明文
     * @return 密文
     */
    Result<String> encryptToHex(String plainText);

    /**
     * 批量明文加密接口
     * 生成十六进制密文
     * @param paramMap 参数映射
     * @return 结果映射
     */
    Result<Map<?, String>> batchEncryptToHex(Map<?, String> paramMap);

    /**
     * AES密文解密接口
     * @param cipherText 密文
     * @return 明文
     */
    Result<String> decodeHex(String cipherText);

    /**
     * AES密文半解密接口
     * @param cipherText 密文
     * @param start      脱敏开始下标
     * @param end        脱敏结束下标
     * @return 明文
     */
    Result<String> subDecodeHex(String cipherText, Integer start, Integer end);

    /**
     * 明文加密接口
     * 生成Base64密文
     * @param plainText 明文
     * @return 密文
     */
    Result<String> encryptToBase64(String plainText);

    /**
     * AES密文解密接口
     * @param cipherText 密文
     * @return 明文
     */
    Result<String> decodeBase64(String cipherText);

    /**
     * AES密文半解密接口
     * @param cipherText 密文
     * @return 明文
     */
    Result<String> subDecodeBase64(String cipherText, Integer start, Integer end);

    /**
     * 密文解密接口
     * @param aesVo 参数对象
     * @return 明文
     */
    Result<String> decode(AesVo aesVo);

    /**
     * 批量密文解密接口
     * @param type     密文类型[1-hex 2-base64]
     * @param paramMap 参数映射集合
     * @return 明文映射集合
     */
    Result<Map<?, String>> batchDecode(Integer type, Map<?, String> paramMap);

}
